package com.sky.business.sys.param;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.math.BigDecimal;

@Data
public class CameraConfigParam {

    @Schema(description = "id")
    private Long id;

    /**
     * 摄像头设备名称
     */
    @Schema(description = "设备名称")
    private String cameraDeviceName;

    /**
     * 摄像头IP地址
     */
    @Schema(description = "设备IP")
    @NotBlank(message = "设备IP不能为空")
    private String cameraIp;

    /**
     * 摄像头端口
     */
    @Schema(description = "设备端口")
    @NotBlank(message = "设备端口不能为空")
    private String cameraPort;

    /**
     * 摄像头rtsp端口
     */
    @Schema(description = "设备rtsp端口")
    @NotBlank(message = "设备rtsp端口不能为空")
    private String cameraRtspPort;

    /**
     * ONVIF用户名
     */
    @Schema(description = "onvif用户名")
    @NotBlank(message = "onvif用户名不能为空")
    private String onvifUser;

    /**
     * ONVIF密码
     */
    @Schema(description = "onvif密码")
    @NotBlank(message = "onvif密码不能为空")
    private String onvifPasswd;

    /**
     * 摄像头纬度
     */
    @Schema(description = "设备纬度")
    @NotBlank(message = "设备纬度不能为空")
    private String cameraLongitude;

    /**
     * 摄像头经度
     */
    @Schema(description = "设备经度")
    @NotBlank(message = "设备经度不能为空")
    private String cameraLatitude;

    /**
     * 摄像头海拔
     */
    @Schema(description = "设备海拔高度")
    @NotBlank(message = "设备海拔高度不能为空")
    private String cameraAltitude;

    /**
     * 水平误差角
     */
    @Schema(description = "设备水平误差角")
    @NotBlank(message = "设备水平误差角不能为空")
    private String panAngle;

    /**
     * 垂直误差角
     */
    @Schema(description = "设备垂直误差角")
    @NotBlank(message = "设备垂直误差角不能为空")
    private String tiltAngle;

    /**
     * 摄像头最小焦距
     */
    @Schema(description = "设备最小焦距")
    @NotBlank(message = "设备最小焦距不能为空")
    private String cameraFocalLenMin;

    /**
     * 摄像机最大焦距
     */
    @Schema(description = "摄像机最大焦距")
    @NotBlank(message = "摄像机最大焦距不能为空")
    private String cameraFocalLenMax;

    /**
     * 摄像头变焦范围最大值
     */
    @Schema(description = "摄像头变焦范围最大值")
    @NotBlank(message = "摄像头变焦范围最大值不能为空")
    private String cameraZoomRangeMax;

    /**
     * 摄像头垂直旋转范围最小值
     */
    @Schema(description = "设备垂直旋转范围最小值")
    @NotBlank(message = "设备垂直旋转最小值不能为空")
    private String cameraTiltRangeMin;

    /**
     * 摄像头垂直旋转范围最大值
     */
    @Schema(description = "设备垂直旋转范围最大值")
    @NotBlank(message = "设备垂直旋转最大值不能为空")
    private String cameraTiltRangeMax;

    /**
     * 原始流推流地址
     */
    @Schema(description = "设备推流地址")
    private String pushStream;

    /**
     * ai推流地址
     */
    @Schema(description = "ai推流地址")
    private String aiPushStream;

    /**
     * 拉流地址
     */
    @Schema(description = "设备拉流地址")
    private String pullStream;

    /**
     * ai拉流地址
     */
    @Schema(description = "设备AI流拉流地址")
    private String aiPullStream;

    /**
     * 自动变倍（开关）
     */
    @Schema(description = "自动变倍开关", defaultValue = "true")
    private Boolean autoZoom = true;

    /**
     * 像元尺寸
     */
    @Schema(description = "像元尺寸", defaultValue = "2")
    private String pixelSize = "2";

    /**
     * 设备类型，1：海康，2：大华，3：自研 40倍，4：自研88倍
     */
    @Schema(description = "设备类型")
    @NotBlank(message = "设备类型不能为空")
    private String deviceType = "1";


    /**
     * 设备tilt是否相反
     */
    @Schema(description = "垂直方向是否反转")
    @NotNull(message = "垂直反转标识不能为空")
    private Boolean reverse = false;

    /**
     * 是否智能设备
     */
    @Schema(description = "是否智能设备")
    @NotNull(message = "只能设备标识不能为空")
    private Boolean smart;

    /**
     * 所在组id
     */
    @Schema(description = "所属组别ID")
    @NotNull(message = "所属组别ID不能为空")
    private Integer groupId;

    /**
     * 最小检测距离
     */
    @Schema(description = "设备最小检测距离（m）")
    @NotNull(message = "设备最大检测距离不能为空")
    private Integer detectMinDist;

    /**
     * 最大检测距离
     */
    @Schema(description = "设备最大检测距离（m）")
    @NotBlank(message = "设备最小检测距离不能为空")
    private Integer detectMaxDist;

    /**
     * 1倍的水平视场角
     */
    @Schema(description = "1倍水平视场角")
    @NotNull(message = "1倍水平视场角不能为空")
    private BigDecimal horizontalFov;

    /**
     * 1倍的垂直市场角
     */
    @Schema(description = "1倍垂直视场角")
    @NotNull(message = "1倍垂直视场角不能为空")
    private BigDecimal verticalFov;

    /**
     * 控制模式
     */
    @Schema(description = "控制模式")
    private Integer controlMode;

    /**
     * ptd端口
     */
    @Schema(description = "ptd端口")
    private Integer ptdPort;
}
